#include "pwm.h"

//初始化timer2的pwm输出参数，预分频，重装载，捕获/比较寄存器
void timer2_pwm_init(uint16_t psr,uint16_t arr,uint16_t pulse)
{
    timer_parameter_struct timer2_init_struct;
    timer_oc_parameter_struct timer2_pwm_output_struct;
    //使能时钟
    rcu_periph_clock_enable(RCU_TIMER2);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);//开启复用时钟就是通知芯片的硬件电路，
                                    //允许将 PB0 引脚的控制权从 GPIO 模块转移到定时器模块，从而实现 PWM 信号的输出。
    //设置GPIOB
    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0);
    //timer2初始化
    timer_deinit(TIMER2);
    timer2_init_struct.prescaler = psr;//预分频
    timer2_init_struct.alignedmode = TIMER_COUNTER_EDGE;//对齐模式
    timer2_init_struct.counterdirection = TIMER_COUNTER_UP;//计数方向
    timer2_init_struct.period = arr;//重装载
    timer2_init_struct.clockdivision = TIMER_CKDIV_DIV1;//时钟分频因子，
                                                        //用于对定时器的输入时钟进行额外的分频，
                                                        //通常和定时器的输入捕获、输出比较等功能相关，
                                                        //会影响这些功能的采样时钟频率
    timer2_init_struct.repetitioncounter = 0;//重复计数器值，仅部分高级定时器支持该功能。
                                             //它控制定时器在产生更新事件之前重复计数的次数。
                                             //每完成一次 repetitioncounter 规定次数的计数循环，才会产生一次更新事件。
    timer_init(TIMER2,&timer2_init_struct);
    //PWM初始化
    timer2_pwm_output_struct.outputstate = TIMER_CCX_ENABLE;//使能通道
    timer_channel_output_config(TIMER2,TIMER_CH_2,&timer2_pwm_output_struct);
    timer_channel_output_mode_config(TIMER2,TIMER_CH_2,TIMER_OC_MODE_PWM0);//设置PWM输出模式
    timer_enable(TIMER2);
}
//设置pwm占空比，duty:捕获/比较寄存器的值
void timer2_pwm_duty_set(uint16_t duty)
{
    timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_2,duty);
}
